﻿//#define _CRT_SECURE_NO_WARNINGS 1
////汉诺塔的非递归
//#include<stdio.h>
//#include<malloc.h>
//typedef struct data {
//    int n;
//    char a, b, c;
//}Hanoi;
//typedef struct Stack {
//    Hanoi data[1000];
//    int top;
//}Stack;
//void Init(Stack* s) {
//    s->top = -1;
//}
//void push(Stack* s, Hanoi h) {
//    s->data[++s->top] = h;
//}
//void pop(Stack* s) {
//    s->top--;
//}
//Hanoi top(Stack* s) {
//    return s->data[s->top];
//}
//int isEmpty(Stack* s) {
//    if (s->top == -1) {
//        return 1;
//    }
//    return 0;
//}
//void initHanoi(Hanoi* h, char a, char b, char c, int n) {
//    h->a = a;
//    h->b = b;
//    h->c = c;
//    h->n = n;
//}
//int main() {
//    int n;
//    Stack* s;
//    s = (Stack*)malloc(sizeof(Stack));
//    fscanf(stdin, "%d", &n);
//    Init(s);
//    Hanoi h, temp;
//    initHanoi(&h, 'a', 'b', 'c', n);
//    push(s, h);
//    //递归模仿函数的出栈和入栈，在加上循环控制结束
//    while (!isEmpty(s)) {
//        h = top(s);
//        pop(s);
//        if (h.n == 1) {
//            printf("%c -> %c\n", h.a, h.c);
//            continue;
//        }
//        initHanoi(&temp, h.b, h.a, h.c, h.n - 1);
//        push(s, temp);
//        initHanoi(&temp, h.a, h.b, h.c, 1);
//        push(s, temp);
//        initHanoi(&temp, h.a, h.c, h.b, h.n - 1);
//        push(s, temp);
//    }
//    free(s);
//    return 0;
//}
//汉诺塔的递归
//#include<stdio.h>
//void move(int n, char a, char b, char c)
//{
//	if (n >= 2)
//	{
//		move(n - 1, a, c, b);
//		printf("%c->%c\n", a, c);
//		move(n - 1, b, a, c);
//	}
//	else
//	{
//		printf("%c->%c\n", a, c);
//	}
//}
//int main()
//{
//	int n;
//	scanf("%d", &n);
//	move(n, 'a', 'b', 'c');
//	return 0;
//}